package com.atguigu.gmall.mq.receiver;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component

public class ConsumerMessage {



    //rabbit头 接收
    //@RabbitHandler
    //队列监听器
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "queue1",durable = "true",autoDelete = "false"),//durable 是否持久化  autoDelete 是否自动删除
            exchange = @Exchange(value = "exchange1"),//持久化默认true 不自动删除
            key = {"routingKey1"}
    ))
    public void message1(String message,Message messages, Channel channel){
        //手动应答
        //参数1：消费头的标记
        //参数2：是否表示批量应答
        try {
            System.out.println("接收的消息："+message);
           // int i=1/0;
            channel.basicAck(messages.getMessageProperties().getDeliveryTag(),false);
        } catch (Exception e) {
            // e.printStackTrace();
            //第一次来 是否不是第一次
            if(!messages.getMessageProperties().isRedelivered()){
                //消息标记  ，是否批量处理 ，是否放回队列
                try {
                    System.out.println("第一次来");
                    channel.basicNack(messages.getMessageProperties().getDeliveryTag(),false,true);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }else {
                System.out.println("拒绝");
                //
                try {
                    //消息标记，是否放回队列 拒绝
                    channel.basicReject(messages.getMessageProperties().getDeliveryTag(),false);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }

    }

    //java代码创建队列queue2 绑定 routingKey  注解式创建队列
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "queue2",durable = "true",autoDelete = "false"),//durable 是否持久化  autoDelete 是否自动删除
            exchange = @Exchange(value = "exchange2"),//持久化默认true 不自动删除
            key = {"routingKey2"}//路由key
    ))
    public void message2(String message, Message messages, Channel channel){
        //手动应答
        //参数1：消费头的标记
        //参数2：是否表示批量应答
        try {
            System.out.println("queue2：接收到的消息：" + message);
           // int i=1/0;
            //参数1：消费头的标记
            //参数2：是否表示批量应答
            channel.basicAck(messages.getMessageProperties().getDeliveryTag(),false);
        } catch (Exception e) {
           // e.printStackTrace();
            //第一次来 是否不是第一次
            if(!messages.getMessageProperties().isRedelivered()){

                try {
                    System.out.println("第一次来");
                    //参数1：消息标记  参数2:是否批量处理  参数3：是否放回队列
                    channel.basicNack(messages.getMessageProperties().getDeliveryTag(),false,true);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }else {
                System.out.println("拒绝");
                //
                try {
                    //消息标记，是否放回队列 拒绝
                    channel.basicReject(messages.getMessageProperties().getDeliveryTag(),false);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }

    }
}
